<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- <script>

        var reg = /\w\dadsd/g;
        console.log(reg.global);  //RegExp 对象是否具有标志 g。
        console.log(reg.ignoreCase); //RegExp 对象是否具有标志 i。
        console.log(reg.multiline); //	RegExp 对象是否具有标志 m。
        console.log(reg.source); //	正则表达式的源文本。

    </script> -->

    <!-- <script>
        // RegExp 对象方法
        var reg1 = /adsd/g;
        var str1 = "adsdsdsad";
        console.log(reg1.test(str1)); //检索字符串中符合规则的片段。返回 true 或 false。

        // var reg = /ab/g;
        var reg = /ab/;       //lastIndex不会动，因为不会执行全局匹配
        var str = "absabababc";
        // reg.exec(str);
        console.log(reg.exec(str)); // 返回类数组，index为匹配的字符串首字母的索引
        console.log(reg.lastIndex); // 匹配完后的索引，之后在此基础之上向后匹配
        console.log(reg.exec(str)); // 接着上面的继续匹配，也就是从lastIndex开始
        console.log(reg.lastIndex); // 可以手动赋值
        console.log(reg.exec(str));
        console.log(reg.lastIndex);
        console.log(reg.exec(str));
        console.log(reg.lastIndex);
        console.log(reg.exec(str)); // 返回null
        console.log(reg.lastIndex); // 返回null之后，lastIndex变为 0
        console.log(reg.exec(str)); // 又回到开始的位置 index = 0

    </script> -->



    <!-- <script>

        var str = "aaaa";
        var reg = /(\w)\1\1\1/g; // ()是子表达式，\1 是引用第一个子表达式的内容
        console.log(str.match(reg));
        var str1 = "aabb";
        var reg1 = /(\w)\1(\w)\2/g; //    \2是引用第二个子表达式的内容
        console.log(str1.match(reg1));

        console.log(reg1.exec(str1)); //类数组多出来两位，即子表达式的结果
        console.log(reg1.lastIndex);
    </script> -->


    <script>
        // 支持正则表达式的 String 对象的方法

        var reg = /ab/;
        var reg = /ab/g;
        var str = "absababab";

        console.log(str.match(reg)); //返回一个数组，找到一个或多个正则表达式的匹配。
        // 若不加g ，则返回一个类数组，只匹配到一个

        var str1 = "aabb";
        var reg1 = /(\w)\1(\w)\2/;     
        // var reg1 = /(\w)\1(\w)\2/g;     
        console.log(str1.match(reg1));
        // 若不加g， 里面还含有子表达式，那么还会返回子表达式的结果


        var str2 = "sdsaabc cdds s";
        // var reg2 = /(\w)\1(\w)\2/;     
        var reg2 = /(\w)\1(\w)\2/g;    
        console.log(str2.search(reg2)); // 只要可以匹配到，返回匹配到的字符串的第一位的索引，始终从开头向后查找
        console.log(str2.search(reg2)); // 反复执行也一样，匹配不到，返回 -1

        var reg3 = /(\w)\1/;   // 即使不是全局匹配也返回一样的结果
        console.log(str2.split(reg3));//根据正则表达式拆分字符串，但是会返回子表达式的结果（无法解决）
        


        // 最实用的replace
        var str4 = "babsadsa";
        var reg4 = /a/;
        var reg44 = /a/g;
        console.log(str4.replace("a", "b")); //返回值 把a替换成b 只能替换第一个，后面的a不变
        console.log(str4.replace(reg4, "b")); // 仍然替换第一个
        console.log(str4.replace(reg44, "b")); // 全部替换
        // 替换与正则表达式匹配的子串



        // 把aabb这样的字符串变成bbaa
        var myStr = 'aasddyyhkdahdaacc';
        var myReg = /(\w)\1(\w)\2/g;
        console.log(myStr.replace(myReg, "$2$2$1$1"));// $1 $2 表示每次子表达式匹配的字符 

        console.log(myStr.replace(myReg, function($, $1, $2){
            console.log($,$1,$2); // 结果为 'ddyy' 'd' 'y'
                                // 'aacc' 'a' 'c' 函数运行了两次
            return $2 + $2 + $1 + $1;
        }));


        var myStr1 = 'aabbcc';
        console.log(myStr1.toUpperCase()); // 变大写
        console.log(myStr1.toUpperCase().toLowerCase()); // 在变小写



    </script>

</body>
</html>